点对点通信函数
当 ranks 需要发送和接收彼此之间的任意数据,而这些数据不能表示为广播或 allgather 时,即发送和接收的所有数据都不相同时,需要使用点对点通信原语。
mcclSend
mcclResult_t mcclSend(const void* sendbuff, size_t count, mcclDataType_t datatype, int peer, mcclComm_t comm, musaStream_t stream)
从 sendbuff 发送数据到 rank peer。
rank peer 需要调用 mcclRecv,使用与此 rank 相同的 datatype 和相同的 count。
此操作对 GPU 是阻塞的。如果需要并行完成多个 mcclSend() 和 mcclRecv() 操作,
它们必须在 mcclGroupStart()/ mcclGroupEnd() 部分内融合。
相关链接:点对点通信。
mcclRecv
mcclResult_t mcclRecv(void* recvbuff, size_t count, mcclDataType_t datatype, int peer, mcclComm_t comm, musaStream_t stream)
从 rank peer 接收数据到 recvbuff。
rank peer 需要调用 mcclSend,使用与此 rank 相同的 datatype 和相同的 count。
此操作对 GPU 是阻塞的。如果需要并行完成多个
mcclSend() 和 mcclrecv() 操作,
必须将他们放在 mcclGroupStart()/ mcclGroupend() 区段内合并调用。
相关链接:点对点通信。

